
#ifndef _GRAPH_H_
#define _GRAPH_H_

typedef void MGraph;
typedef void MVertex;
typedef void(MGraph_Printf)(MVertex *);

typedef struct _tag_MGraph
{
    int count;    // 顶点的个数
    MVertex **v;  // 顶点所在的数组的指针
    int **matrix; // 邻接矩阵
} TMGraph;

/* 创建并返回有n个顶点的图 */
MGraph *MGraph_Create(MVertex **v, int n);
/* 销毁graph所指向的图 */
void MGraph_Destroy(MGraph *graph);
/* 将graph所指图的边集合清空 */
void MGraph_Clear(MGraph *graph);
/* 在graph所指图中的v1和v2之间加上边，且边的权为w */
int MGraph_AddEdge(MGraph *graph, int v1, int v2, int w);
/* 将graph所指图中v1和v2之间的边删除，返回权值 */
int MGraph_RemoveEdge(MGraph *graph, int v1, int v2);
/* 将graph所指图中v1和v2之间的边的权值返回 */
int MGraph_GetEdge(MGraph *graph, int v1, int v2);
/* 将graph所指图中v顶点的度数 */
int MGraph_TD(MGraph *graph, int v);
/* 将graph所指图中的顶点数返回 */
int MGraph_VertexCount(MGraph *graph);
/* 将graph所指图中的边数返回 */
int MGraph_EdgeCount(MGraph *graph);

void MGraph_DFS(MGraph *graph, int v, MGraph_Printf *pFunc);

void MGraph_BFS(MGraph *graph, int v, MGraph_Printf *pFunc);

void MGraph_Display(MGraph *graph, MGraph_Printf *pFunc);

void MGraph_Display_matrix(MGraph *graph);

#endif
